To pytanie ma już tutaj odpowiedzi: Express js - nie można przekierować (4 odpowiedzi) Zamknięte 7 lat temu. Używam paszportjs z oprogramowaniem pośredniczącym poniżej. Ma to na celu sprawdzenie, czy użytkownik jest zalogowany, gdy żąda pewnych rzeczy. Jeśli nie jest zalogowany, powinien zostać przekierowany na stronę logowania. Mam następującą trasę żądania: app.put ('/ fantasyteams /: fantasyTeamId', auth.requiresLogin, fantasyteams.update); Ta trasa zostanie wywołana, gdy użytkownik spróbuje zaktualizować zasób o nazwie Fantasy Team na stronie internetowej auth.requiresLogin to oprogramowanie pośredniczące w następujący sposób: exports.requiresLogin = function (req, res, next) { if (req.isAuthenticated ()) { powrót dalej () } return res.redirect ("/ signin"); }; Po zalogowaniu się, zasymulowałem wygaśnięcie sesji, usuwając sesyjny plik cookie. Następnie przez stronę internetową złożyłem żądanie PUT '/ fantasyteams / 123', aby zaktualizować numer zespołu fantasy 123. fantasyteams.update to po prostu operacja zapisywania mongodb / mongoose: exports.update = function (req, res) { var fantasyteam = req.fantasyteam; fantasyteam = _.extend (fantasyteam, req.body); fantasyteam.save (function (err) { res.jsonp (fantasyteam); }); }; Zgodnie z oczekiwaniami program obsługi trasy (app.put ...) powyżej przechwycił żądanie, przekazuje je do oprogramowania pośredniego auth.requiresLogin, aby sprawdzić, czy użytkownik jest zalogowany. Okazuje się, że użytkownik nie jest zalogowany, ponieważ usunąłem jego sesyjny plik cookie. res.redirect jest wywoływana zgodnie z oczekiwaniami. Jednak witryna nie przekierowuje do strony logowania. Widzę to w dziennikach poleceń node.js: PUT / logowanie 404 328 ms Co zrobiłem źle?
2021-02-25 08:21:31
Wygląda na to, że problem polega na tym, że nie masz programu obsługi trasy dla PUT / signin. Pierwotne żądanie było putem, więc gdy przekierowuje, nadal jest częścią tego samego żądania „put” z przeglądarki. Po prostu dodaj moduł obsługi dla put / post / cokolwiek z app.all ('/ signin') 3 | Nie szukasz odpowiedzi? Przejrzyj inne pytania oznaczone tagami Pliki cookie sesji node.js wyrażają passport.js lub zadaj własne pytanie.